#include "usart_send.h"

/**
 * @brief 在关键区域(创建队列)时不能发生切换，关闭中断
 * 
 */
void USART_Enter_Critical(void)
{
    __disable_irq();   // 关闭所有中断
}

void USART_Exit_Critical(void)
{
    __enable_irq();   // 开启所有中断
}

/**
 * @brief 发送接口
 * 
 * @param this USART_SendType 结构体指针
 * @param data 数据
 * @param size 数据大小
 */
void USART_port_output(USART_SendType *this,uint8_t *data, uint16_t size)
{
    HAL_UART_Transmit_DMA((UART_HandleTypeDef *)this->handle, data, size); // 直接发送队列的数据
}

// 中断回调函数中调用回调函数
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
    USART_SendCallback((void *)huart);
}

// 这里是printf库中的函数哦。
#define USART_UX USART6 //printf使用的串口
void putchar_(char c)
{
    while ((USART_UX->SR & 0X40) == 0); /* 等待上一个字符发送完成 */
    USART_UX->DR = (uint8_t)c; /* 将要发送的字符 ch 写入到DR寄存器 */
    // HAL_UART_Transmit(&huart1, (uint8_t *)&character, 1, 0xFFFF);   // 这是一个阻塞的函数
}
